﻿' 版权所有(C) BBW 保留所有权利。
' 此代码的发布遵从
' GNU GPL http://www.gnu.org/licenses/licenses.zh-cn.html#GPL。
' 中文GPL百科说明 http://baike.baidu.com/view/3176980.htm。
'
' 版权所有(C) BBW。保留所有权利。

Imports System.Data.SqlClient
Imports System.Data
Imports System.Data.OleDb

Public Class clsDataOpt
    ' 数据库操作类集合类
    ' 初始化用于连接数据库和向用户显示
    ' 连接错误的常量。
    ' Data Source=192.168.0.100;Initial Catalog=metOffice;Persist Security Info=True;User ID=sa
    '"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\XXXX.MDB"

    ' Protected Const SqlConnectionString As String = "Server=(local);DataBase=;Integrated Security=SSPI"

    Protected Const ConnectionErrorMessage As String = "运行这个示例,你必须存在SQL的安装.指示安装SQL数据库,请查阅相关文档."

    'Protected didPreviouslyConnect As Boolean = False
    'Protected didCreateTable As Boolean = False
    'Protected connectionString As String = SqlConnectionString

    Private SQLConnString As String

    Public Property SqlConnectionString() As String

        Get
            ' Gets the connection string property value.
            Return SQLConnString
        End Get
        Set(Value As String)
            ' Sets the connection string property value.
            SQLConnString = Value
        End Set
    End Property


#Region "构造函数"
    Public Sub New(ByVal connString As String)
        Me.SqlConnectionString = connString
    End Sub
#End Region

#Region "操作SQL语句"

    Public Function ExecuteSQL(ByVal strSQL As String, ByRef msgString As String) As DataSet

        Dim sTokens() As String
        Dim dbConnection As OleDbConnection = Nothing
        Dim cmd As OleDbCommand = Nothing
        Dim da As OleDbDataAdapter = Nothing
        Dim daSet As DataSet = Nothing

        Try
            ' 利用 SqlConnection 类可与 SQL Server 进行通信。
            ' 构造函数将连接字符串作为参数接受，此
            ' 连接字符串采用集成安全性，这意味着要能正常工作，您 
            ' 必须能够登录到 SQL Server，或者是 Administrators
            ' 组中的一员。
            dbConnection = New OleDbConnection(Me.SQLConnString)

            sTokens = Split(strSQL)
            If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
                ' SqlCommand 对象用于执行 SQL 命令。
                'cmd = New OleDbCommand(strSQL, dbConnection)
                cmd = New OleDbCommand()
                ' 打开连接，执行命令，然后关闭
                ' 连接。无数据返回时，使用 ExecuteNonQuery
                ' 可提高效率。
                cmd.CommandText = strSQL
                cmd.Connection = dbConnection

                dbConnection.Open()
                cmd.ExecuteNonQuery()
                msgString = "成功！"
                Return Nothing
            Else
                ' SqlCommand 对象用于执行 SQL 命令。
                cmd = New OleDbCommand(strSQL, dbConnection)
                ' 填充数据集。
                da = New OleDbDataAdapter(cmd)
                daSet = New DataSet()
                msgString = "ok"
                da.Fill(daSet)
                Return daSet
            End If

        Catch sqlExc As SqlException
            msgString = sqlExc.ToString
            Return Nothing
        Finally
            If (Not (dbConnection Is Nothing)) Then
                dbConnection.Close()            '本语句使用方法释放占用的资源和可能出现异常占用的资源
                'dbConnection.Dispose()          '本语句使用释放方法，释放全部相关占用的资源，在没有方法关闭的情况下，不能放弃使用本语句，以保证资源使用的正常
            End If
            If (Not (cmd Is Nothing)) Then
                cmd.Dispose()
            End If
            If (Not (da Is Nothing)) Then
                da.Dispose()
            End If
            If (Not (daSet Is Nothing)) Then
                daSet.Dispose()
            End If
        End Try

    End Function

#End Region

End Class


